@jackwener/opencli 1.3.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/CHANGELOG.md +128 -0
  2. package/README.md +44 -5
  3. package/README.zh-CN.md +44 -5
  4. package/SKILL.md +317 -5
  5. package/TESTING.md +4 -4
  6. package/dist/browser/errors.d.ts +2 -1
  7. package/dist/browser/errors.js +9 -10
  8. package/dist/build-manifest.js +1 -3
  9. package/dist/cli-manifest.json +2573 -989
  10. package/dist/cli.js +42 -2
  11. package/dist/clis/bilibili/download.js +20 -65
  12. package/dist/clis/bilibili/utils.js +2 -1
  13. package/dist/clis/chaoxing/assignments.js +2 -1
  14. package/dist/clis/doubao/ask.d.ts +1 -0
  15. package/dist/clis/doubao/ask.js +35 -0
  16. package/dist/clis/doubao/common.d.ts +23 -0
  17. package/dist/clis/doubao/common.js +564 -0
  18. package/dist/clis/doubao/new.d.ts +1 -0
  19. package/dist/clis/doubao/new.js +20 -0
  20. package/dist/clis/doubao/read.d.ts +1 -0
  21. package/dist/clis/doubao/read.js +19 -0
  22. package/dist/clis/doubao/send.d.ts +1 -0
  23. package/dist/clis/doubao/send.js +22 -0
  24. package/dist/clis/doubao/status.d.ts +1 -0
  25. package/dist/clis/doubao/status.js +24 -0
  26. package/dist/clis/doubao-app/ask.d.ts +1 -0
  27. package/dist/clis/doubao-app/ask.js +53 -0
  28. package/dist/clis/doubao-app/common.d.ts +37 -0
  29. package/dist/clis/doubao-app/common.js +110 -0
  30. package/dist/clis/doubao-app/dump.d.ts +1 -0
  31. package/dist/clis/doubao-app/dump.js +24 -0
  32. package/dist/clis/doubao-app/new.d.ts +1 -0
  33. package/dist/clis/doubao-app/new.js +20 -0
  34. package/dist/clis/doubao-app/read.d.ts +1 -0
  35. package/dist/clis/doubao-app/read.js +18 -0
  36. package/dist/clis/doubao-app/screenshot.d.ts +1 -0
  37. package/dist/clis/doubao-app/screenshot.js +18 -0
  38. package/dist/clis/doubao-app/send.d.ts +1 -0
  39. package/dist/clis/doubao-app/send.js +27 -0
  40. package/dist/clis/doubao-app/status.d.ts +1 -0
  41. package/dist/clis/doubao-app/status.js +16 -0
  42. package/dist/clis/hackernews/ask.yaml +38 -0
  43. package/dist/clis/hackernews/best.yaml +38 -0
  44. package/dist/clis/hackernews/jobs.yaml +36 -0
  45. package/dist/clis/hackernews/new.yaml +38 -0
  46. package/dist/clis/hackernews/search.yaml +44 -0
  47. package/dist/clis/hackernews/show.yaml +38 -0
  48. package/dist/clis/hackernews/top.yaml +3 -1
  49. package/dist/clis/hackernews/user.yaml +25 -0
  50. package/dist/clis/twitter/download.js +13 -97
  51. package/dist/clis/twitter/thread.js +2 -1
  52. package/dist/clis/v2ex/member.yaml +29 -0
  53. package/dist/clis/v2ex/node.yaml +34 -0
  54. package/dist/clis/v2ex/nodes.yaml +31 -0
  55. package/dist/clis/v2ex/replies.yaml +32 -0
  56. package/dist/clis/v2ex/user.yaml +34 -0
  57. package/dist/clis/weibo/search.d.ts +1 -0
  58. package/dist/clis/weibo/search.js +73 -0
  59. package/dist/clis/weixin/download.d.ts +12 -0
  60. package/dist/clis/weixin/download.js +183 -0
  61. package/dist/clis/xiaohongshu/download.js +12 -60
  62. package/dist/clis/xiaohongshu/publish.d.ts +18 -0
  63. package/dist/clis/xiaohongshu/publish.js +352 -0
  64. package/dist/clis/xiaohongshu/search.js +47 -15
  65. package/dist/clis/xiaohongshu/search.test.d.ts +1 -0
  66. package/dist/clis/xiaohongshu/search.test.js +114 -0
  67. package/dist/clis/yollomi/background.d.ts +4 -0
  68. package/dist/clis/yollomi/background.js +45 -0
  69. package/dist/clis/yollomi/edit.d.ts +5 -0
  70. package/dist/clis/yollomi/edit.js +56 -0
  71. package/dist/clis/yollomi/face-swap.d.ts +5 -0
  72. package/dist/clis/yollomi/face-swap.js +43 -0
  73. package/dist/clis/yollomi/generate.d.ts +9 -0
  74. package/dist/clis/yollomi/generate.js +100 -0
  75. package/dist/clis/yollomi/models.d.ts +1 -0
  76. package/dist/clis/yollomi/models.js +33 -0
  77. package/dist/clis/yollomi/object-remover.d.ts +4 -0
  78. package/dist/clis/yollomi/object-remover.js +42 -0
  79. package/dist/clis/yollomi/remove-bg.d.ts +4 -0
  80. package/dist/clis/yollomi/remove-bg.js +38 -0
  81. package/dist/clis/yollomi/restore.d.ts +4 -0
  82. package/dist/clis/yollomi/restore.js +38 -0
  83. package/dist/clis/yollomi/try-on.d.ts +4 -0
  84. package/dist/clis/yollomi/try-on.js +46 -0
  85. package/dist/clis/yollomi/upload.d.ts +7 -0
  86. package/dist/clis/yollomi/upload.js +71 -0
  87. package/dist/clis/yollomi/upscale.d.ts +4 -0
  88. package/dist/clis/yollomi/upscale.js +53 -0
  89. package/dist/clis/yollomi/utils.d.ts +45 -0
  90. package/dist/clis/yollomi/utils.js +180 -0
  91. package/dist/clis/yollomi/video.d.ts +5 -0
  92. package/dist/clis/yollomi/video.js +56 -0
  93. package/dist/clis/zhihu/download.d.ts +1 -5
  94. package/dist/clis/zhihu/download.js +20 -126
  95. package/dist/clis/zhihu/download.test.js +7 -5
  96. package/dist/clis/zhihu/question.js +2 -1
  97. package/dist/commanderAdapter.js +4 -6
  98. package/dist/daemon.js +5 -2
  99. package/dist/discovery.js +10 -10
  100. package/dist/download/article-download.d.ts +59 -0
  101. package/dist/download/article-download.js +178 -0
  102. package/dist/download/media-download.d.ts +49 -0
  103. package/dist/download/media-download.js +112 -0
  104. package/dist/errors.d.ts +23 -2
  105. package/dist/errors.js +58 -2
  106. package/dist/errors.test.d.ts +1 -0
  107. package/dist/errors.test.js +59 -0
  108. package/dist/execution.js +9 -10
  109. package/dist/explore.js +4 -2
  110. package/dist/external.d.ts +15 -0
  111. package/dist/external.js +48 -2
  112. package/dist/external.test.d.ts +1 -0
  113. package/dist/external.test.js +64 -0
  114. package/dist/main.js +10 -0
  115. package/dist/plugin.d.ts +4 -0
  116. package/dist/plugin.js +45 -23
  117. package/dist/plugin.test.js +6 -1
  118. package/dist/record.d.ts +47 -0
  119. package/dist/record.js +545 -0
  120. package/dist/registry.d.ts +7 -2
  121. package/dist/registry.js +2 -6
  122. package/dist/runtime.d.ts +3 -1
  123. package/dist/runtime.js +10 -3
  124. package/dist/validate.js +1 -3
  125. package/docs/.vitepress/config.mts +1 -0
  126. package/docs/adapters/browser/doubao.md +35 -0
  127. package/docs/adapters/browser/hackernews.md +20 -4
  128. package/docs/adapters/browser/tiktok.md +1 -1
  129. package/docs/adapters/browser/v2ex.md +31 -10
  130. package/docs/adapters/browser/weibo.md +4 -0
  131. package/docs/adapters/browser/weixin.md +33 -0
  132. package/docs/adapters/browser/xiaohongshu.md +8 -6
  133. package/docs/adapters/browser/yollomi.md +69 -0
  134. package/docs/adapters/desktop/doubao-app.md +35 -0
  135. package/docs/adapters/index.md +16 -5
  136. package/docs/advanced/download.md +4 -0
  137. package/package.json +3 -1
  138. package/src/browser/errors.ts +17 -11
  139. package/src/build-manifest.ts +2 -3
  140. package/src/cli.ts +45 -2
  141. package/src/clis/bilibili/download.ts +25 -83
  142. package/src/clis/bilibili/utils.ts +2 -1
  143. package/src/clis/chaoxing/assignments.ts +2 -1
  144. package/src/clis/doubao/ask.ts +40 -0
  145. package/src/clis/doubao/common.ts +619 -0
  146. package/src/clis/doubao/new.ts +22 -0
  147. package/src/clis/doubao/read.ts +20 -0
  148. package/src/clis/doubao/send.ts +25 -0
  149. package/src/clis/doubao/status.ts +27 -0
  150. package/src/clis/doubao-app/ask.ts +60 -0
  151. package/src/clis/doubao-app/common.ts +116 -0
  152. package/src/clis/doubao-app/dump.ts +28 -0
  153. package/src/clis/doubao-app/new.ts +21 -0
  154. package/src/clis/doubao-app/read.ts +21 -0
  155. package/src/clis/doubao-app/screenshot.ts +19 -0
  156. package/src/clis/doubao-app/send.ts +30 -0
  157. package/src/clis/doubao-app/status.ts +17 -0
  158. package/src/clis/hackernews/ask.yaml +38 -0
  159. package/src/clis/hackernews/best.yaml +38 -0
  160. package/src/clis/hackernews/jobs.yaml +36 -0
  161. package/src/clis/hackernews/new.yaml +38 -0
  162. package/src/clis/hackernews/search.yaml +44 -0
  163. package/src/clis/hackernews/show.yaml +38 -0
  164. package/src/clis/hackernews/top.yaml +3 -1
  165. package/src/clis/hackernews/user.yaml +25 -0
  166. package/src/clis/twitter/download.ts +13 -111
  167. package/src/clis/twitter/thread.ts +2 -1
  168. package/src/clis/v2ex/member.yaml +29 -0
  169. package/src/clis/v2ex/node.yaml +34 -0
  170. package/src/clis/v2ex/nodes.yaml +31 -0
  171. package/src/clis/v2ex/replies.yaml +32 -0
  172. package/src/clis/v2ex/user.yaml +34 -0
  173. package/src/clis/weibo/search.ts +78 -0
  174. package/src/clis/weixin/download.ts +199 -0
  175. package/src/clis/xiaohongshu/download.ts +12 -71
  176. package/src/clis/xiaohongshu/publish.ts +392 -0
  177. package/src/clis/xiaohongshu/search.test.ts +134 -0
  178. package/src/clis/xiaohongshu/search.ts +49 -15
  179. package/src/clis/yollomi/background.ts +48 -0
  180. package/src/clis/yollomi/edit.ts +58 -0
  181. package/src/clis/yollomi/face-swap.ts +45 -0
  182. package/src/clis/yollomi/generate.ts +95 -0
  183. package/src/clis/yollomi/models.ts +38 -0
  184. package/src/clis/yollomi/object-remover.ts +44 -0
  185. package/src/clis/yollomi/remove-bg.ts +40 -0
  186. package/src/clis/yollomi/restore.ts +40 -0
  187. package/src/clis/yollomi/try-on.ts +48 -0
  188. package/src/clis/yollomi/upload.ts +78 -0
  189. package/src/clis/yollomi/upscale.ts +49 -0
  190. package/src/clis/yollomi/utils.ts +202 -0
  191. package/src/clis/yollomi/video.ts +61 -0
  192. package/src/clis/zhihu/download.test.ts +7 -5
  193. package/src/clis/zhihu/download.ts +23 -158
  194. package/src/clis/zhihu/question.ts +2 -1
  195. package/src/commanderAdapter.ts +4 -7
  196. package/src/daemon.ts +5 -2
  197. package/src/discovery.ts +26 -26
  198. package/src/download/article-download.ts +272 -0
  199. package/src/download/media-download.ts +178 -0
  200. package/src/errors.test.ts +79 -0
  201. package/src/errors.ts +92 -2
  202. package/src/execution.ts +14 -10
  203. package/src/explore.ts +4 -2
  204. package/src/external.test.ts +88 -0
  205. package/src/external.ts +56 -2
  206. package/src/generate.ts +2 -1
  207. package/src/main.ts +10 -0
  208. package/src/plugin.test.ts +7 -1
  209. package/src/plugin.ts +49 -25
  210. package/src/record.ts +617 -0
  211. package/src/registry.ts +9 -5
  212. package/src/runtime.ts +16 -4
  213. package/src/validate.ts +2 -3
  214. package/tests/e2e/browser-auth.test.ts +10 -1
  215. package/tests/e2e/browser-public.test.ts +13 -8
  216. package/tests/e2e/public-commands.test.ts +209 -21
  217. package/tests/smoke/api-health.test.ts +65 -6
  218. package/.github/workflows/release-please.yml +0 -25
package/CHANGELOG.md CHANGED
@@ -1,5 +1,133 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.3.2](https://github.com/jackwener/opencli/compare/v1.3.1...v1.3.2) (2026-03-24)
4
+
5
+
6
+ ### Features
7
+
8
+ * **error-handling:** refine error handling with semantic error types and emoji-coded output ([#312](https://github.com/jackwener/opencli/issues/312)) ([b4d64ca](https://github.com/jackwener/opencli/commit/b4d64ca))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **security:** replace execSync with execFileSync to prevent command injection ([#309](https://github.com/jackwener/opencli/issues/309)) ([41aedf6](https://github.com/jackwener/opencli/commit/41aedf6))
14
+ * remove duplicate getErrorMessage import in discovery.ts ([#315](https://github.com/jackwener/opencli/issues/315)) ([75f4237](https://github.com/jackwener/opencli/commit/75f4237))
15
+ * **e2e:** broaden xiaoyuzhou skip logic for overseas CI runners ([#316](https://github.com/jackwener/opencli/issues/316)) ([a170873](https://github.com/jackwener/opencli/commit/a170873))
16
+
17
+
18
+ ### Documentation
19
+
20
+ * **SKILL.md:** sync command reference — add missing sites and desktop adapters ([#314](https://github.com/jackwener/opencli/issues/314)) ([8bf750c](https://github.com/jackwener/opencli/commit/8bf750c))
21
+
22
+
23
+ ### Chores
24
+
25
+ * pre-release cleanup — fix dependencies, sync docs, reduce code duplication ([#311](https://github.com/jackwener/opencli/issues/311)) ([c9b3568](https://github.com/jackwener/opencli/commit/c9b3568))
26
+
27
+
28
+ ## [1.3.1](https://github.com/jackwener/opencli/compare/v1.3.0...v1.3.1) (2026-03-22)
29
+
30
+
31
+ ### Features
32
+
33
+ * **plugin:** add update command, hot reload after install, README section ([#307](https://github.com/jackwener/opencli/issues/307)) ([966f6e5](https://github.com/jackwener/opencli/commit/966f6e5))
34
+ * **yollomi:** add new commands and update documentation ([#235](https://github.com/jackwener/opencli/issues/235)) ([ea83242](https://github.com/jackwener/opencli/commit/ea83242))
35
+ * **record:** add live recording command for API capture ([#300](https://github.com/jackwener/opencli/issues/300)) ([dff0fe5](https://github.com/jackwener/opencli/commit/dff0fe5))
36
+ * **weibo:** add weibo search command ([#299](https://github.com/jackwener/opencli/issues/299)) ([c7895ea](https://github.com/jackwener/opencli/commit/c7895ea))
37
+ * **v2ex:** add node, user, member, replies, nodes commands ([#282](https://github.com/jackwener/opencli/issues/282)) ([a83027d](https://github.com/jackwener/opencli/commit/a83027d))
38
+ * **hackernews:** add new, best, ask, show, jobs, search, user commands ([#290](https://github.com/jackwener/opencli/issues/290)) ([127a974](https://github.com/jackwener/opencli/commit/127a974))
39
+ * **doubao-app:** add Doubao AI desktop app CLI adapter ([#289](https://github.com/jackwener/opencli/issues/289)) ([66c4b84](https://github.com/jackwener/opencli/commit/66c4b84))
40
+ * **doubao:** add doubao browser adapter ([#277](https://github.com/jackwener/opencli/issues/277)) ([9cdc127](https://github.com/jackwener/opencli/commit/9cdc127))
41
+ * **xiaohongshu:** add publish command for 图文 note automation ([#276](https://github.com/jackwener/opencli/issues/276)) ([a6d993f](https://github.com/jackwener/opencli/commit/a6d993f))
42
+ * **weixin:** add weixin article download adapter & abstract download helpers ([#280](https://github.com/jackwener/opencli/issues/280)) ([b7c6c02](https://github.com/jackwener/opencli/commit/b7c6c02))
43
+
44
+
45
+ ### Bug Fixes
46
+
47
+ * **tests:** use positional arg syntax in browser search tests ([#302](https://github.com/jackwener/opencli/issues/302)) ([4343ec0](https://github.com/jackwener/opencli/commit/4343ec0))
48
+ * **xiaohongshu:** improve search login-wall handling and detail output ([#298](https://github.com/jackwener/opencli/issues/298)) ([f8bf663](https://github.com/jackwener/opencli/commit/f8bf663))
49
+ * ensure standard PATH is available for external CLIs ([#285](https://github.com/jackwener/opencli/issues/285)) ([22f5c7a](https://github.com/jackwener/opencli/commit/22f5c7a))
50
+ * **xiaohongshu:** scope image selector to avoid downloading avatars ([#293](https://github.com/jackwener/opencli/issues/293)) ([3a21be6](https://github.com/jackwener/opencli/commit/3a21be6))
51
+ * add turndown dependency to package.json ([#288](https://github.com/jackwener/opencli/issues/288)) ([2a52906](https://github.com/jackwener/opencli/commit/2a52906))
52
+
53
+
54
+ ## [1.3.0](https://github.com/jackwener/opencli/compare/v1.2.3...v1.3.0) (2026-03-21)
55
+
56
+
57
+ ### Features
58
+
59
+ * **daemon:** harden security against browser CSRF attacks ([#268](https://github.com/jackwener/opencli/issues/268)) ([40bd11d](https://github.com/jackwener/opencli/commit/40bd11d))
60
+
61
+
62
+ ### Performance
63
+
64
+ * smart page settle via DOM stability detection ([#271](https://github.com/jackwener/opencli/issues/271)) ([4b976da](https://github.com/jackwener/opencli/commit/4b976da))
65
+
66
+
67
+ ### Refactoring
68
+
69
+ * doctor defaults to live mode, remove setup command entirely ([#263](https://github.com/jackwener/opencli/issues/263)) ([b4a8089](https://github.com/jackwener/opencli/commit/b4a8089))
70
+
71
+
72
+ ## [1.2.3](https://github.com/jackwener/opencli/compare/v1.2.2...v1.2.3) (2026-03-21)
73
+
74
+
75
+ ### Bug Fixes
76
+
77
+ * replace all about:blank with data: URI to prevent New Tab Override interception ([#257](https://github.com/jackwener/opencli/issues/257)) ([3e91876](https://github.com/jackwener/opencli/commit/3e91876))
78
+ * harden resolveTabId against New Tab Override extension interception ([#255](https://github.com/jackwener/opencli/issues/255)) ([112fdef](https://github.com/jackwener/opencli/commit/112fdef))
79
+
80
+
81
+ ## [1.2.2](https://github.com/jackwener/opencli/compare/v1.2.1...v1.2.2) (2026-03-21)
82
+
83
+
84
+ ### Bug Fixes
85
+
86
+ * harden browser automation pipeline (resolves [#249](https://github.com/jackwener/opencli/issues/249)) ([#251](https://github.com/jackwener/opencli/issues/251)) ([71b2c39](https://github.com/jackwener/opencli/commit/71b2c39))
87
+
88
+
89
+ ## [1.2.1](https://github.com/jackwener/opencli/compare/v1.2.0...v1.2.1) (2026-03-21)
90
+
91
+
92
+ ### Bug Fixes
93
+
94
+ * **twitter:** harden timeline review findings ([#236](https://github.com/jackwener/opencli/issues/236)) ([4cd0409](https://github.com/jackwener/opencli/commit/4cd0409))
95
+ * **wikipedia:** fix search arg name + add random and trending commands ([#231](https://github.com/jackwener/opencli/issues/231)) ([1d56dd7](https://github.com/jackwener/opencli/commit/1d56dd7))
96
+ * resolve inconsistent doctor --live report (fix [#121](https://github.com/jackwener/opencli/issues/121)) ([#224](https://github.com/jackwener/opencli/issues/224)) ([387aa0d](https://github.com/jackwener/opencli/commit/387aa0d))
97
+
98
+
99
+ ## [1.2.0](https://github.com/jackwener/opencli/compare/v1.1.0...v1.2.0) (2026-03-21)
100
+
101
+
102
+ ### Features
103
+
104
+ * **douban:** add movie adapter with search, top250, subject, marks, reviews commands ([#239](https://github.com/jackwener/opencli/issues/239)) ([70651d3](https://github.com/jackwener/opencli/commit/70651d3))
105
+ * **devto:** add devto adapter ([#234](https://github.com/jackwener/opencli/issues/234)) ([ea113a6](https://github.com/jackwener/opencli/commit/ea113a6))
106
+ * **twitter:** add --type flag to timeline command ([#83](https://github.com/jackwener/opencli/issues/83)) ([e98cf75](https://github.com/jackwener/opencli/commit/e98cf75))
107
+ * **google:** add search, suggest, news, and trends adapters ([#184](https://github.com/jackwener/opencli/issues/184)) ([4e32599](https://github.com/jackwener/opencli/commit/4e32599))
108
+ * add douban, sinablog, substack adapters; upgrade medium to TS ([#185](https://github.com/jackwener/opencli/issues/185)) ([bdf5967](https://github.com/jackwener/opencli/commit/bdf5967))
109
+ * **xueqiu:** add earnings-date command ([#211](https://github.com/jackwener/opencli/issues/211)) ([fae1dce](https://github.com/jackwener/opencli/commit/fae1dce))
110
+ * **browser:** advanced DOM snapshot engine with 13-layer pruning pipeline ([#210](https://github.com/jackwener/opencli/issues/210)) ([d831b04](https://github.com/jackwener/opencli/commit/d831b04))
111
+ * **instagram,facebook:** add write actions and extended commands ([#201](https://github.com/jackwener/opencli/issues/201)) ([eb0ccaf](https://github.com/jackwener/opencli/commit/eb0ccaf))
112
+ * **grok:** add opt-in --web flow for grok ask ([#193](https://github.com/jackwener/opencli/issues/193)) ([fcff2e4](https://github.com/jackwener/opencli/commit/fcff2e4))
113
+ * **tiktok:** add TikTok adapter with 15 commands ([#202](https://github.com/jackwener/opencli/issues/202)) ([4391ccf](https://github.com/jackwener/opencli/commit/4391ccf))
114
+ * add Lobste.rs, Instagram, and Facebook adapters ([#199](https://github.com/jackwener/opencli/issues/199)) ([ce484c2](https://github.com/jackwener/opencli/commit/ce484c2))
115
+ * **medium:** add medium adapter ([#190](https://github.com/jackwener/opencli/issues/190)) ([06c902a](https://github.com/jackwener/opencli/commit/06c902a))
116
+ * plugin system (Stage 0-2) ([1d39295](https://github.com/jackwener/opencli/commit/1d39295))
117
+ * make primary args positional across all CLIs ([#242](https://github.com/jackwener/opencli/issues/242)) ([9696db9](https://github.com/jackwener/opencli/commit/9696db9))
118
+ * **xueqiu:** make primary args positional ([#213](https://github.com/jackwener/opencli/issues/213)) ([fb2a145](https://github.com/jackwener/opencli/commit/fb2a145))
119
+
120
+
121
+ ### Refactoring
122
+
123
+ * replace hardcoded skipPreNav with declarative navigateBefore field ([#208](https://github.com/jackwener/opencli/issues/208)) ([a228758](https://github.com/jackwener/opencli/commit/a228758))
124
+ * **boss:** extract common.ts utilities, fix missing login detection ([#200](https://github.com/jackwener/opencli/issues/200)) ([ae30763](https://github.com/jackwener/opencli/commit/ae30763))
125
+ * type discovery core ([#219](https://github.com/jackwener/opencli/issues/219)) ([bd274ce](https://github.com/jackwener/opencli/commit/bd274ce))
126
+ * type browser core ([#218](https://github.com/jackwener/opencli/issues/218)) ([28c393e](https://github.com/jackwener/opencli/commit/28c393e))
127
+ * type pipeline core ([#217](https://github.com/jackwener/opencli/issues/217)) ([8a4ea41](https://github.com/jackwener/opencli/commit/8a4ea41))
128
+ * reduce core any usage ([#216](https://github.com/jackwener/opencli/issues/216)) ([45cee57](https://github.com/jackwener/opencli/commit/45cee57))
129
+ * fail fast on invalid pipeline steps ([#237](https://github.com/jackwener/opencli/issues/237)) ([c76f86c](https://github.com/jackwener/opencli/commit/c76f86c))
130
+
3
131
  ## [1.1.0](https://github.com/jackwener/opencli/compare/v1.0.6...v1.1.0) (2026-03-20)
4
132
 
5
133
 
package/README.md CHANGED
@@ -105,16 +105,19 @@ Run `opencli list` for the live registry.
105
105
  | **bilibili** | `hot` `search` `me` `favorite` `history` `feed` `subtitle` `dynamic` `ranking` `following` `user-videos` `download` | Browser |
106
106
  | **codex** | `status` `send` `read` `new` `dump` `extract-diff` `model` `ask` `screenshot` `history` `export` | Desktop |
107
107
  | **chatwise** | `status` `new` `send` `read` `ask` `model` `history` `export` `screenshot` | Desktop |
108
+ | **doubao** | `status` `new` `send` `read` `ask` | Browser |
109
+ | **doubao-app** | `status` `new` `send` `read` `ask` `screenshot` `dump` | Desktop |
108
110
  | **notion** | `status` `search` `read` `new` `write` `sidebar` `favorites` `export` | Desktop |
109
111
  | **discord-app** | `status` `send` `read` `channels` `servers` `search` `members` | Desktop |
110
- | **v2ex** | `hot` `latest` `topic` `daily` `me` `notifications` | Public / Browser |
112
+ | **v2ex** | `hot` `latest` `topic` `node` `user` `member` `replies` `nodes` `daily` `me` `notifications` | Public / Browser |
111
113
  | **xueqiu** | `feed` `hot-stock` `hot` `search` `stock` `watchlist` `earnings-date` | Browser |
112
114
  | **antigravity** | `status` `send` `read` `new` `dump` `extract-code` `model` `watch` `serve` | Desktop |
113
115
  | **chatgpt** | `status` `new` `send` `read` `ask` | Desktop |
114
- | **xiaohongshu** | `search` `notifications` `feed` `user` `download` `creator-notes` `creator-note-detail` `creator-notes-summary` `creator-profile` `creator-stats` | Browser |
116
+ | **xiaohongshu** | `search` `notifications` `feed` `user` `download` `publish` `creator-notes` `creator-note-detail` `creator-notes-summary` `creator-profile` `creator-stats` | Browser |
115
117
  | **apple-podcasts** | `search` `episodes` `top` | Public |
116
118
  | **xiaoyuzhou** | `podcast` `podcast-episodes` `episode` | Public |
117
119
  | **zhihu** | `hot` `search` `question` `download` | Browser |
120
+ | **weixin** | `download` | Browser |
118
121
  | **youtube** | `search` `video` `transcript` | Browser |
119
122
  | **boss** | `search` `detail` `recommend` `joblist` `greet` `batchgreet` `send` `chatlist` `chatmsg` `invite` `mark` `exchange` `resume` `stats` | Browser |
120
123
  | **coupang** | `search` `add-to-cart` | Browser |
@@ -124,24 +127,33 @@ Run `opencli list` for the live registry.
124
127
  | **devto** | `top` `tag` `user` | Public |
125
128
  | **arxiv** | `search` `paper` | Public |
126
129
  | **wikipedia** | `search` `summary` | Public |
127
- | **hackernews** | `top` | Public |
130
+ | **hackernews** | `top` `new` `best` `ask` `show` `jobs` `search` `user` | Public |
128
131
  | **linkedin** | `search` | Browser |
129
132
  | **reuters** | `search` | Browser |
130
133
  | **smzdm** | `search` | Browser |
131
- | **weibo** | `hot` | Browser |
134
+ | **weibo** | `hot` `search` | Browser |
132
135
  | **yahoo-finance** | `quote` | Browser |
133
136
  | **sinafinance** | `news` | 🌐 Public |
134
137
  | **barchart** | `quote` `options` `greeks` `flow` | Browser |
135
138
  | **chaoxing** | `assignments` `exams` | Browser |
136
- | **grok** | `ask` | Desktop |
139
+ | **grok** | `ask` | Browser |
137
140
  | **hf** | `top` | Public |
138
141
  | **jike** | `feed` `search` `create` `like` `comment` `repost` `notifications` `post` `topic` `user` | Browser |
139
142
  | **jimeng** | `generate` `history` | Browser |
143
+ | **yollomi** | `generate` `video` `edit` `upload` `models` `remove-bg` `upscale` `face-swap` `restore` `try-on` `background` `object-remover` | Browser |
140
144
  | **linux-do** | `hot` `latest` `search` `categories` `category` `topic` | Public |
141
145
  | **stackoverflow** | `hot` `search` `bounties` `unanswered` | Public |
142
146
  | **steam** | `top-sellers` | Public |
143
147
  | **weread** | `shelf` `search` `book` `highlights` `notes` `notebooks` `ranking` | Browser |
144
148
  | **douban** | `search` `top250` `subject` `marks` `reviews` | Browser |
149
+ | **facebook** | `feed` `profile` `search` `friends` `groups` `events` `notifications` `memories` `add-friend` `join-group` | Browser |
150
+ | **google** | `news` `search` `suggest` `trends` | Public |
151
+ | **instagram** | `explore` `profile` `search` `user` `followers` `following` `follow` `unfollow` `like` `unlike` `comment` `save` `unsave` `saved` | Browser |
152
+ | **lobsters** | `hot` `newest` `active` `tag` | Public |
153
+ | **medium** | `feed` `search` `user` `shared` | Browser |
154
+ | **sinablog** | `hot` `search` `article` `user` `shared` | Browser |
155
+ | **substack** | `feed` `search` `publication` `shared` | Browser |
156
+ | **tiktok** | `explore` `search` `profile` `user` `following` `follow` `unfollow` `like` `unlike` `comment` `save` `unsave` `live` `notifications` `friends` | Browser |
145
157
 
146
158
 
147
159
  ### External CLI Hub
@@ -155,6 +167,7 @@ OpenCLI acts as a universal hub for your existing command-line tools. It provide
155
167
  | **docker** | Docker command-line interface | `opencli docker ps` |
156
168
  | **kubectl** | Kubernetes command-line tool | `opencli kubectl get pods` |
157
169
  | **readwise** | Readwise & Reader CLI | `opencli readwise login` |
170
+ | **gws** | Google Workspace CLI — Docs, Sheets, Drive, Gmail, Calendar | `opencli gws docs list` |
158
171
 
159
172
  **Zero Configuration**: OpenCLI purely passes your inputs to the underlying binary via standard I/O streams. The external CLI works exactly as it naturally would, maintaining its standard output formats.
160
173
 
@@ -179,6 +192,7 @@ Each desktop adapter has its own detailed documentation with commands reference,
179
192
  | **ChatWise** | Multi-LLM client (GPT-4, Claude, Gemini) | [Doc](./docs/adapters/desktop/chatwise.md) |
180
193
  | **Notion** | Search, read, write Notion pages | [Doc](./docs/adapters/desktop/notion.md) |
181
194
  | **Discord** | Discord Desktop — messages, channels, servers | [Doc](./docs/adapters/desktop/discord.md) |
195
+ | **Doubao** | Control Doubao AI desktop app via CDP | [Doc](./docs/adapters/desktop/doubao-app.md) |
182
196
 
183
197
  ## Download Support
184
198
 
@@ -192,6 +206,7 @@ OpenCLI supports downloading images, videos, and articles from supported platfor
192
206
  | **bilibili** | Videos | Requires `yt-dlp` installed |
193
207
  | **twitter** | Images, Videos | Downloads from user media tab or single tweet |
194
208
  | **zhihu** | Articles (Markdown) | Exports articles with optional image download |
209
+ | **weixin** | Articles (Markdown) | Exports WeChat Official Account articles |
195
210
 
196
211
  ### Prerequisites
197
212
 
@@ -225,6 +240,9 @@ opencli zhihu download "https://zhuanlan.zhihu.com/p/xxx" --output ./zhihu
225
240
 
226
241
  # Export with local images
227
242
  opencli zhihu download "https://zhuanlan.zhihu.com/p/xxx" --download-images
243
+
244
+ # Export WeChat article to Markdown
245
+ opencli weixin download --url "https://mp.weixin.qq.com/s/xxx" --output ./weixin
228
246
  ```
229
247
 
230
248
 
@@ -244,6 +262,25 @@ opencli bilibili hot -f csv # CSV
244
262
  opencli bilibili hot -v # Verbose: show pipeline debug steps
245
263
  ```
246
264
 
265
+ ## Plugins
266
+
267
+ Extend OpenCLI with community-contributed adapters. Plugins use the same YAML/TS format as built-in commands and are automatically discovered at startup.
268
+
269
+ ```bash
270
+ opencli plugin install github:user/opencli-plugin-my-tool # Install
271
+ opencli plugin list # List installed
272
+ opencli plugin update my-tool # Update to latest
273
+ opencli plugin uninstall my-tool # Remove
274
+ ```
275
+
276
+ | Plugin | Type | Description |
277
+ |--------|------|-------------|
278
+ | [opencli-plugin-github-trending](https://github.com/ByteYue/opencli-plugin-github-trending) | YAML | GitHub Trending repositories |
279
+ | [opencli-plugin-hot-digest](https://github.com/ByteYue/opencli-plugin-hot-digest) | TS | Multi-platform trending aggregator |
280
+ | [opencli-plugin-juejin](https://github.com/Astro-Han/opencli-plugin-juejin) | YAML | 稀土掘金 (Juejin) hot articles |
281
+
282
+ See [Plugins Guide](./docs/guide/plugins.md) for creating your own plugin.
283
+
247
284
  ## For AI Agents (Developer Guide)
248
285
 
249
286
  If you are an AI assistant tasked with creating a new command adapter for `opencli`, please follow the AI Agent workflow below:
@@ -291,6 +328,8 @@ See **[TESTING.md](./TESTING.md)** for how to run and write tests.
291
328
 
292
329
  [![Star History Chart](https://api.star-history.com/svg?repos=jackwener/opencli&type=Date)](https://star-history.com/#jackwener/opencli&Date)
293
330
 
331
+
332
+
294
333
  ## License
295
334
 
296
335
  [Apache-2.0](./LICENSE)
package/README.zh-CN.md CHANGED
@@ -107,16 +107,19 @@ npm install -g @jackwener/opencli@latest
107
107
  | **bilibili** | `hot` `search` `me` `favorite` `history` `feed` `subtitle` `dynamic` `ranking` `following` `user-videos` `download` | 浏览器 |
108
108
  | **codex** | `status` `send` `read` `new` `dump` `extract-diff` `model` `ask` `screenshot` `history` `export` | 桌面端 |
109
109
  | **chatwise** | `status` `new` `send` `read` `ask` `model` `history` `export` `screenshot` | 桌面端 |
110
+ | **doubao** | `status` `new` `send` `read` `ask` | 浏览器 |
111
+ | **doubao-app** | `status` `new` `send` `read` `ask` `screenshot` `dump` | 桌面端 |
110
112
  | **notion** | `status` `search` `read` `new` `write` `sidebar` `favorites` `export` | 桌面端 |
111
113
  | **discord-app** | `status` `send` `read` `channels` `servers` `search` `members` | 桌面端 |
112
- | **v2ex** | `hot` `latest` `topic` `daily` `me` `notifications` | 公开 / 浏览器 |
114
+ | **v2ex** | `hot` `latest` `topic` `node` `user` `member` `replies` `nodes` `daily` `me` `notifications` | 公开 / 浏览器 |
113
115
  | **xueqiu** | `feed` `hot-stock` `hot` `search` `stock` `watchlist` `earnings-date` | 浏览器 |
114
116
  | **antigravity** | `status` `send` `read` `new` `dump` `extract-code` `model` `watch` `serve` | 桌面端 |
115
117
  | **chatgpt** | `status` `new` `send` `read` `ask` | 桌面端 |
116
- | **xiaohongshu** | `search` `notifications` `feed` `user` `download` `creator-notes` `creator-note-detail` `creator-notes-summary` `creator-profile` `creator-stats` | 浏览器 |
118
+ | **xiaohongshu** | `search` `notifications` `feed` `user` `download` `publish` `creator-notes` `creator-note-detail` `creator-notes-summary` `creator-profile` `creator-stats` | 浏览器 |
117
119
  | **apple-podcasts** | `search` `episodes` `top` | 公开 |
118
120
  | **xiaoyuzhou** | `podcast` `podcast-episodes` `episode` | 公开 |
119
121
  | **zhihu** | `hot` `search` `question` `download` | 浏览器 |
122
+ | **weixin** | `download` | 浏览器 |
120
123
  | **youtube** | `search` `video` `transcript` | 浏览器 |
121
124
  | **boss** | `search` `detail` `recommend` `joblist` `greet` `batchgreet` `send` `chatlist` `chatmsg` `invite` `mark` `exchange` `resume` `stats` | 浏览器 |
122
125
  | **coupang** | `search` `add-to-cart` | 浏览器 |
@@ -126,24 +129,33 @@ npm install -g @jackwener/opencli@latest
126
129
  | **devto** | `top` `tag` `user` | 公开 |
127
130
  | **arxiv** | `search` `paper` | 公开 |
128
131
  | **wikipedia** | `search` `summary` | 公开 |
129
- | **hackernews** | `top` | 公共 API |
132
+ | **hackernews** | `top` `new` `best` `ask` `show` `jobs` `search` `user` | 公共 API |
130
133
  | **linkedin** | `search` | 浏览器 |
131
134
  | **reuters** | `search` | 浏览器 |
132
135
  | **smzdm** | `search` | 浏览器 |
133
- | **weibo** | `hot` | 浏览器 |
136
+ | **weibo** | `hot` `search` | 浏览器 |
134
137
  | **yahoo-finance** | `quote` | 浏览器 |
135
138
  | **sinafinance** | `news` | 🌐 公开 |
136
139
  | **barchart** | `quote` `options` `greeks` `flow` | 浏览器 |
137
140
  | **chaoxing** | `assignments` `exams` | 浏览器 |
138
- | **grok** | `ask` | 桌面端 |
141
+ | **grok** | `ask` | 浏览器 |
139
142
  | **hf** | `top` | 公开 |
140
143
  | **jike** | `feed` `search` `create` `like` `comment` `repost` `notifications` `post` `topic` `user` | 浏览器 |
141
144
  | **jimeng** | `generate` `history` | 浏览器 |
145
+ | **yollomi** | `generate` `video` `edit` `upload` `models` `remove-bg` `upscale` `face-swap` `restore` `try-on` `background` `object-remover` | 浏览器 |
142
146
  | **linux-do** | `hot` `latest` `search` `categories` `category` `topic` | 公开 |
143
147
  | **stackoverflow** | `hot` `search` `bounties` `unanswered` | 公开 |
144
148
  | **steam** | `top-sellers` | 公开 |
145
149
  | **weread** | `shelf` `search` `book` `highlights` `notes` `notebooks` `ranking` | 浏览器 |
146
150
  | **douban** | `search` `top250` `subject` `marks` `reviews` | 浏览器 |
151
+ | **facebook** | `feed` `profile` `search` `friends` `groups` `events` `notifications` `memories` `add-friend` `join-group` | 浏览器 |
152
+ | **google** | `news` `search` `suggest` `trends` | 公开 |
153
+ | **instagram** | `explore` `profile` `search` `user` `followers` `following` `follow` `unfollow` `like` `unlike` `comment` `save` `unsave` `saved` | 浏览器 |
154
+ | **lobsters** | `hot` `newest` `active` `tag` | 公开 |
155
+ | **medium** | `feed` `search` `user` `shared` | 浏览器 |
156
+ | **sinablog** | `hot` `search` `article` `user` `shared` | 浏览器 |
157
+ | **substack** | `feed` `search` `publication` `shared` | 浏览器 |
158
+ | **tiktok** | `explore` `search` `profile` `user` `following` `follow` `unfollow` `like` `unlike` `comment` `save` `unsave` `live` `notifications` `friends` | 浏览器 |
147
159
 
148
160
 
149
161
  ### 外部 CLI 枢纽
@@ -157,6 +169,7 @@ OpenCLI 也可以作为你现有命令行工具的统一入口,负责发现、
157
169
  | **docker** | Docker 命令行工具 | `opencli docker ps` |
158
170
  | **kubectl** | Kubernetes CLI | `opencli kubectl get pods` |
159
171
  | **readwise** | Readwise / Reader CLI | `opencli readwise login` |
172
+ | **gws** | Google Workspace CLI — Docs, Sheets, Drive, Gmail, Calendar | `opencli gws docs list` |
160
173
 
161
174
  **零配置透传**:OpenCLI 会把你的输入原样转发给底层二进制,保留原生 stdout / stderr 行为。
162
175
 
@@ -181,6 +194,7 @@ opencli register mycli
181
194
  | **ChatWise** | 多 LLM 客户端(GPT-4、Claude、Gemini) | [Doc](./docs/adapters/desktop/chatwise.md) |
182
195
  | **Notion** | 搜索、读取、写入 Notion 页面 | [Doc](./docs/adapters/desktop/notion.md) |
183
196
  | **Discord** | Discord 桌面版 — 消息、频道、服务器 | [Doc](./docs/adapters/desktop/discord.md) |
197
+ | **Doubao** | 通过 CDP 控制豆包桌面应用 | [Doc](./docs/adapters/desktop/doubao-app.md) |
184
198
 
185
199
  ## 下载支持
186
200
 
@@ -194,6 +208,7 @@ OpenCLI 支持从各平台下载图片、视频和文章。
194
208
  | **B站** | 视频 | 需要安装 `yt-dlp` |
195
209
  | **Twitter/X** | 图片、视频 | 从用户媒体页或单条推文下载 |
196
210
  | **知乎** | 文章(Markdown) | 导出文章,可选下载图片到本地 |
211
+ | **微信公众号** | 文章(Markdown) | 导出微信公众号文章为 Markdown |
197
212
 
198
213
  ### 前置依赖
199
214
 
@@ -227,6 +242,9 @@ opencli zhihu download "https://zhuanlan.zhihu.com/p/xxx" --output ./zhihu
227
242
 
228
243
  # 导出并下载图片
229
244
  opencli zhihu download "https://zhuanlan.zhihu.com/p/xxx" --download-images
245
+
246
+ # 导出微信公众号文章为 Markdown
247
+ opencli weixin download --url "https://mp.weixin.qq.com/s/xxx" --output ./weixin
230
248
  ```
231
249
 
232
250
 
@@ -246,6 +264,25 @@ opencli bilibili hot -f csv # CSV
246
264
  opencli bilibili hot -v # 详细模式:展示管线执行步骤调试信息
247
265
  ```
248
266
 
267
+ ## 插件
268
+
269
+ 通过社区贡献的插件扩展 OpenCLI。插件使用与内置命令相同的 YAML/TS 格式,启动时自动发现。
270
+
271
+ ```bash
272
+ opencli plugin install github:user/opencli-plugin-my-tool # 安装
273
+ opencli plugin list # 查看已安装
274
+ opencli plugin update my-tool # 更新到最新
275
+ opencli plugin uninstall my-tool # 卸载
276
+ ```
277
+
278
+ | 插件 | 类型 | 描述 |
279
+ |------|------|------|
280
+ | [opencli-plugin-github-trending](https://github.com/ByteYue/opencli-plugin-github-trending) | YAML | GitHub Trending 仓库 |
281
+ | [opencli-plugin-hot-digest](https://github.com/ByteYue/opencli-plugin-hot-digest) | TS | 多平台热榜聚合 |
282
+ | [opencli-plugin-juejin](https://github.com/Astro-Han/opencli-plugin-juejin) | YAML | 稀土掘金热门文章 |
283
+
284
+ 详见 [插件指南](./docs/zh/guide/plugins.md) 了解如何创建自己的插件。
285
+
249
286
  ## 致 AI Agent(开发者指南)
250
287
 
251
288
  如果你是一个被要求查阅代码并编写新 `opencli` 适配器的 AI,请遵守以下工作流。
@@ -289,6 +326,8 @@ opencli cascade https://api.example.com/data
289
326
 
290
327
  [![Star History Chart](https://api.star-history.com/svg?repos=jackwener/opencli&type=Date)](https://star-history.com/#jackwener/opencli&Date)
291
328
 
329
+
330
+
292
331
  ## License
293
332
 
294
333
  [Apache-2.0](./LICENSE)